home *** CD-ROM | disk | FTP | other *** search
- ;
- ;
- ; Usage :
- ; -pktentry
- ; _pktasminit( void far * buffers, int maxbufs, int buflen)
- ;
- ; (c) 1991 University of Waterloo,
- ; Faculty of Engineering,
- ; Engineering Microcomputer Network Development Office
- ;
- ; version
- ;
- ; 0.1 22-May-1992 E. P. Engelke
- ;
- ;
- include masmdefs.hsm
- include model.hsm
-
- codedef ASMPKT
- datadef
-
- cstart ASMPKT
-
- maxbufs dw 0
- maxlen dw 0
- bufs dw 0
- bufseg dw 0
-
- cproc _pktentry
- pushf
-
- cli ; no interruptions now
-
- or AL, AL
- jnz encue ; branch if was a 1 and must encue packet now
-
- ; buffer request operation
- ; to check our buffers we will need the same DS seg, set it now
- push CX
- push DS
- mov DI, CS:bufseg
- mov DS, DI
-
- ; check the packet length
- cmp CX, cs:maxlen
- jg no_fnd ; pretend none were found
-
- mov DI, CS:bufs
- mov CX, CS:maxbufs
- mov AL, 0ffh
-
- srcloop:test AL, byte ptr DS:DI
- jz found
- add DI, CS:maxlen
- add DI, 2
- loop srcloop
-
- no_fnd: xor DI, DI ; for whatever error, throw away the buffer
- mov DS, DI ; by returning 0000:0000
- sub DI, 2
-
- found: push DS
- pop ES
- add DI, 2
- pop DS
- pop CX
- popf
- retf
-
- ; encue packet
- ;
- encue: or SI, SI
- jz no_enqu ; not a valid pointer, cannot encue
- push SI
- sub SI, 2
- mov AL, 1 ; should be already, but just in case
- mov byte ptr DS:SI, AL
- pop SI
- no_enqu:popf
- retf
- cendp _pktentry
-
- cpublic _pktasminit ; bufptr, maxbufs, buflen
- mov AX, +@AB + 0 [BP] ; bufptr
- mov BX, +@AB + 2 [BP] ; bufptr segment
- mov CX, +@AB + 4 [BP] ; maxbufs
- mov DX, +@AB + 6 [BP] ; buflen
- mov CS:bufs, AX
- mov CS:bufseg, BX
- mov CS:maxbufs, CX
- mov CS:maxlen, DX
- creturn _pktasminit
- cend ASMPKT
- end
-